package se.kernel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Observable;
import java.util.Observer;

public class Persistencia implements Observer
{
    private File archivo;

    public Persistencia( )
    {
        archivo = new File( "data/perst.data" );
    }

    @Override
    public void update( Observable o, Object arg )
    {
        Servidor servidor = ( Servidor )o;
        guardarClientesYGrupos( servidor.getClientes( ), servidor.getGrupos( ) );
    }

    private synchronized void guardarClientesYGrupos( ArrayList<Cliente> nClientes, ArrayList<Grupo> nGrupos )
    {
        ArrayList<Cliente> clientes = nClientes;
        try
        {
            ObjectOutputStream ous = new ObjectOutputStream( new FileOutputStream( archivo ) );
            ous.writeObject( clientes );
            ous.writeObject( nGrupos );
            ous.close( );
            System.out.println( new Date( System.currentTimeMillis( ) ) + " - Estado del servidor persistido" );
        }
        catch( FileNotFoundException e )
        {
            e.printStackTrace( );
        }
        catch( IOException e )
        {
            e.printStackTrace( );
        }
    }

    @SuppressWarnings("unchecked")
    public ArrayList<Object> cargarDatos( ) throws FileNotFoundException, IOException, ClassNotFoundException
    {
        ArrayList<Object> perst = new ArrayList<Object>( );
        ObjectInputStream ois = new ObjectInputStream( new FileInputStream( archivo ) );
        ArrayList<Cliente> clientes = ( ArrayList<Cliente> )ois.readObject( );
        ArrayList<Grupo> grupos = ( ArrayList<Grupo> )ois.readObject( );
        perst.add( clientes );
        perst.add( grupos );
        return perst;
    }
}
